#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@Time    : 2025/4/10 21:06
@Author  : zzj
@File    : http.py
"""
import os

from flask import Flask

from config import Config
from internal.exception import CustomException
from internal.router import Router
from pkg.response import json, Response, HttpCode


class Http(Flask):
    """Http服务引擎"""

    def __init__(self, *args, conf: Config, router: Router, **kwargs):
        super().__init__(*args, **kwargs)
        # 初始化应用配置
        self.config.from_object(conf)
        # 注册绑定异常错误处理
        self.register_error_handler(Exception, self._register_error_handler)
        # 注册应用路由
        router.register_router(self)

    def _register_error_handler(self, error: Exception):
        # 1。异常信息是不是我们自定义异常，如果是可以提取message和code等信息
        if isinstance(error, CustomException):
            return json(Response(code=error.code,
                                 message=error.message,
                                 data=error.data if error.data is not None else {}))
        # 2。如果不是我们自定义的异常，则可能是程序、数据库抛出的异常，也可以提取信息，设置为FAIL状态码
        # 判断是不是调试模式或者是不是开发环境，如果是直接把异常抛出去，如果不是转成JSON返回出去
        if self.debug or os.getenv("FLASK_ENV") == "development":
            return error
        else:
            return json(Response(code=HttpCode.FAIL, message=str(error), data=[]))
